package config;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

import com.threed.jpct.Logger;
import com.threed.jpct.Texture;
import com.threed.jpct.TextureManager;

public class GameConfig {
	private float anglePerPixel;
	private float defaultCameraDist;
	private float defaultZoomDist;
	private int defaultRotateDx;
	private int defaultRotateDy;
	private float maxZoom;
	private float minZoom;
	
	public GameConfig(String configFile){
	    try {
	    	String line;
	    	BufferedReader in = new BufferedReader(new FileReader(configFile));
	    	Logger.log("Wczytano plik konfiguracyjny: "+configFile);
			
	    	while ((line = in.readLine()) != null) {
				if(line.equals("textures{")){
					loadTextures(in);
				}
				else if(line.equals("camera{")){
					loadCameraProperties(in);
				}
			}
		} catch (NumberFormatException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	private void loadTextures(BufferedReader in) throws IOException{
		String line;
		String [] tmp;
    	while (!(line = in.readLine()).equals("}")) {
			tmp = line.split("=");
			TextureManager.getInstance().addTexture(tmp[0].trim(), new Texture(tmp[1].trim()));
		}		
	}
	
	private void loadCameraProperties(BufferedReader in) throws IOException{
		String line;
		String [] tmp;
    	while (!(line = in.readLine()).equals("}")) {
			tmp = line.split("=");
			if(tmp[0].trim().equals("ANGLE_PER_PIXEL")){
				Logger.log("CAMERA PARAM ANGLE_PER_PIXEL = "+tmp[1].trim());
				anglePerPixel = Float.parseFloat(tmp[1].trim());
			}
			else if(tmp[0].trim().equals("DEFAULT_CAMERA_DIST")){
				Logger.log("CAMERA PARAM DEFAULT_CAMERA_DIST = "+tmp[1].trim());
				defaultCameraDist = Float.parseFloat(tmp[1].trim());
			}
			else if(tmp[0].trim().equals("DEFAULT_ZOOM_DIST")){
				Logger.log("CAMERA PARAM DEFAULT_ZOOM_DIST = "+tmp[1].trim());
				defaultZoomDist = Float.parseFloat(tmp[1].trim());
			}
			else if(tmp[0].trim().equals("DEFAULT_ROTATE_DX")){
				Logger.log("CAMERA PARAM DEFAULT_ROTATE_DX = "+tmp[1].trim());
				defaultRotateDx = Integer.parseInt(tmp[1].trim());
			}
			else if(tmp[0].trim().equals("DEFAULT_ROTATE_DY")){
				Logger.log("CAMERA PARAM DEFAULT_ROTATE_DY = "+tmp[1].trim());
				defaultRotateDy = Integer.parseInt(tmp[1].trim());
			}
			else if(tmp[0].trim().equals("MAX_ZOOM")){
				Logger.log("CAMERA PARAM MAX_ZOOM = "+tmp[1].trim());
				maxZoom = Float.parseFloat(tmp[1].trim());
			}
			else if(tmp[0].trim().equals("MIN_ZOOM")){
				Logger.log("CAMERA PARAM MIN_ZOOM = "+tmp[1].trim());
				minZoom = Float.parseFloat(tmp[1].trim());
			}
		}		
	}
	
	public float getAnglePerPixel() {
		return anglePerPixel;
	}

	public void setAnglePerPixel(float anglePerPixel) {
		this.anglePerPixel = anglePerPixel;
	}

	public float getDefaultCameraDist() {
		return defaultCameraDist;
	}

	public void setDefaultCameraDist(float defaultCameraDist) {
		this.defaultCameraDist = defaultCameraDist;
	}

	public float getDefaultZoomDist() {
		return defaultZoomDist;
	}

	public void setDefaultZoomDist(float defaultZoomDist) {
		this.defaultZoomDist = defaultZoomDist;
	}

	public int getDefaultRotateDx() {
		return defaultRotateDx;
	}

	public void setDefaultRotateDx(int defaultRotateDx) {
		this.defaultRotateDx = defaultRotateDx;
	}

	public int getDefaultRotateDy() {
		return defaultRotateDy;
	}

	public void setDefaultRotateDy(int defaultRotateDy) {
		this.defaultRotateDy = defaultRotateDy;
	}

	public float getMaxZoom() {
		return maxZoom;
	}

	public void setMaxZoom(float maxZoom) {
		this.maxZoom = maxZoom;
	}

	public float getMinZoom() {
		return minZoom;
	}

	public void setMinZoom(float minZoom) {
		this.minZoom = minZoom;
	}
}
